// 样例的代码过于冗余  进项相关优化
// 对样例进行优化
#include <stdio.h>
void menu()
{
    printf("****************************\n");
    printf("******1. add  2. sub *******\n");
    printf("******3. mul  4. div *******\n");
    printf("******0. exit  *************\n");
}

int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}

// 定义一个新函数 实现对计算函数的调用 来完成计算
void calc(int (*pf)(int, int)) // 利用函数指针实现对不同的 但功能 相 配合的 函数的 调用
{
    int x = 0;
    int y = 0;
    int res = 0;
    printf("please input two nums\n");
    scanf("%d %d", &x, &y);
    res = pf(x, y);
    printf("%d\n", res);
}
// 利用回调函数实现   解决代码冗余
// 回调函数需要和函数指针结合
int main()
{
    int input = 0;
    do
    {
        menu();
        printf("chose\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            calc(Add);
            break;
        case 2:
            calc(Sub);
            break;
        case 3:
            calc(Mul);
            break;
        case 4:
            calc(Div);
            break;
        case 0:
            printf("exit \n");
            break;
        default:
            printf("error \n");
            break;
        }

    } while (input);
    return 0;
}